﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 虚方法
{
    class Program
    {
        static void Main(string[] args)
        {

            SonClass son = new SonClass();
            string v = son.GetName();
            Console.WriteLine(v);


            ParentClass parent = new ParentClass();
            string name = parent.GetName();

            Console.WriteLine(name);

            ParentClass cls = new SonClass();
            string vname = cls.GetName();
            Console.WriteLine($"{vname}");

            Console.ReadKey();
        }
    }


    class ParentClass
    {
        /// <summary>
        /// 如果要被子类重写，就需要标记为abstract或virtual
        /// </summary>
        /// <returns></returns>
        public virtual string GetName()
        {
            return "父级名称";
        }
    }

    class SonClass : ParentClass
    {
        /// <summary>
        /// 重写父类的方法，父类的方法首先要是virtual的，然后还需要用override。
        /// 只有标记了override，才表示子类重写了父类的虚方法
        /// </summary>
        /// <returns></returns>
        public override string GetName()
        {
            return "子级名称";
        }
    }
}
